<html>
<head>
  <title>Evernote Export</title>
  <basefont face="微软雅黑" size="2" />
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <meta name="exporter-version" content="YXBJ Windows/602498 (zh-CN, DDL); Windows/10.0.0 (Win64); EDAMVersion=V2;"/>
  <style>
    body, td {
      font-family: 微软雅黑;
      font-size: 10pt;
    }
  </style>
</head>
<body>
<a name="507"/>

<div>
<span><div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">API</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">使用</span></div><ol style="margin-top: 0mm; margin-bottom: 0mm; margin-left: 0mm; padding-left: 0pt;"><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 13pt; text-align: justify;"><span style="min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: ����;">注册驱动</span></div></li></ol><div style="margin: 0mm 0mm 0mm 6mm; text-indent: 0mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 13pt; text-align: justify;"><span style="text-indent: 0mm; min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">Class.forName(“com.mysql.jdbc.Driver”)</span></div><ol start="2" style="margin-top: 0mm; margin-bottom: 0mm; margin-left: 0mm; padding-left: 0pt;"><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 13pt; text-align: justify;"><span style="min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: ����;">获得连接</span></div></li></ol><div style="margin: 0mm 0mm 0mm 6mm; text-indent: 0mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 13pt; text-align: justify;"><span style="text-indent: 0mm; min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">x.getConnection()</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">3.</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">获取语句执行平台</span></div><div style="margin: 0mm; text-indent: 7mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 13pt; text-align: justify;"><span style="text-indent: 7mm; min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">x.createStatement()</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">4.</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">处理结果集</span></div><div style="margin: 0mm; text-indent: 7mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: 7mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">x.executeUpdate(String sq)(</span><span style="text-indent: 7mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">需要做条件判断</span><span style="text-indent: 7mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">)</span></div><div style="margin: 0mm; text-indent: 7mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 13pt; text-align: justify;"><span style="text-indent: 7mm; min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">x.executeQuery(String sql)</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">Resultset</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">接口</span></div><div style="min-height: 13pt; text-align: justify;"><span style="min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">作用：封装数据库查询的结果集，对结果集进行遍历，取出每一条记录。</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">方法：</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">boolean next()   1.</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">游标向下一行</span></div><div style="margin: 0mm 0mm 0mm 44mm; text-indent: -44mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">                     2.</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">返回</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">boolean</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">类型，如果还有下一条记录，返回</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">true</span><span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">，否则返回</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">false</span></div><div style="margin: 0mm 0mm 0mm 44mm; text-indent: -44mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">      Xxx  getXXX(String or int ) 1.</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">通过列名，参数是</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">String</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">类型。返回不同的类型</span></div><div style="margin: 0mm 0mm 0mm 44mm; text-indent: -44mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">                            2.</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">通过列号，参数是整数，从</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">1</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">开始。返回不同的类型</span></div><div style="margin: 0mm 0mm 0mm 44mm; text-indent: -44mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">Xxx  getXXX(String or int )</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">重载方法参数可以是</span><span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">String</span> <span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">也可以是</span><span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">int</span></div><div style="margin: 0mm 0mm 0mm 44mm; text-indent: -44mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">JDBC</span><span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">实现增删改查</span></div><div style="margin: 0mm 0mm 0mm 44mm; text-indent: -44mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">JDBC</span><span style="text-indent: -44mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">工具类</span></div><div style="margin: 0mm 0mm 0mm 44mm; text-indent: -44mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 13pt; text-align: justify;"><span style="text-indent: -44mm; min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">当某一个功能需要经常用到</span> <span style="text-indent: -44mm; min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">我们可以把这个功能做成一个工具类</span> <span style="text-indent: -44mm; min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">方便使用</span></div><div style="margin: 0mm 0mm 0mm 44mm; text-indent: -44mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 13pt; text-align: justify;"><span style="text-indent: -44mm; min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">工具类的内容：把多个字符串定义成常量</span></div><div style="margin: 0mm 0mm 0mm 44mm; text-indent: -44mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 13pt; text-align: justify;"><span style="text-indent: -44mm; min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">             </span> <span style="text-indent: -44mm; min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">数据库的连接</span></div><div style="min-height: 13pt; text-align: justify;"><span style="min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">                           </span> <span style="min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">关闭资源</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">DML</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">操作</span></div><div style="min-height: 13pt; text-align: justify;"><span style="min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">插入记录</span></div><div style="min-height: 13pt; text-align: justify;"><span style="min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">jdbc:<a href="mysql://localhost:3306/db4?characterEncoding=UTF-8" style="font-family: Calibri; font-size: 10.5pt;">mysql://localhost:3306/db4?characterEncoding=UTF-8</a></span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">如何解决</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">注入问题？</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PreparedStatement</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">接口介绍</span></div><ol style="margin-top: 0mm; margin-bottom: 0mm; margin-left: 0mm; padding-left: 0pt;"><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PreparedStatement</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">是</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">Statement</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">接口的子接口，继承于父接口中所有的方法。它是一个预编译的</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">语</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">句对象</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">.</span></div></li><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: ����;">预编译</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">: </span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">是指</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">语句被预编译</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">,</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">并存储在</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PreparedStatement</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">对象中。然后可以使用此对象多次高效地执行</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">该语句。</span></div></li></ol><div style="min-height: 13pt; text-align: justify;"><span style="min-height: 13pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">特点：</span></div><ol style="margin-top: 0mm; margin-bottom: 0mm; margin-left: 0mm; padding-left: 0pt;"><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: ����;">因为有预先编译的功能，提高</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">的执行效率</span></div></li><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: ����;">可以有效的防止</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">注入的问题，安全性更高</span></div></li></ol><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">如何让获取</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PreparedStatement</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">对象？</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">通过</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">Connection</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">创建</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PreparedStatement</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">对象</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">语句中使用占位符？创建一个语句对象</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PreparedStatement</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">接口常用方法</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">ExecuteUpdate();  </span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">和</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">  executeQuery();</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">使用</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PreparedStatement</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">的步骤</span></div><ol style="margin-top: 0mm; margin-bottom: 0mm; margin-left: 0mm; padding-left: 0pt;"><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: ����;">编写</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">语句，未知内容使用</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">?</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">占位：</span></div></li><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: ����;">获得</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PreparedStatement</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">对象</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">3)</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">设置实际参数：</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">setXxx(</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">占位符的位置</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">,</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">真实的值</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">) 4)</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">执行参数化</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">语句</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">5)</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">关闭资源</span></div></li></ol><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">setXxx</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">重载方法</span></div><ol style="margin-top: 0mm; margin-bottom: 0mm; margin-left: 0mm; padding-left: 0pt;"><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">setDouble(int parameterIndex, double x)</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">将指定参数设置为给定</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">Java double</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">值。</span></div></li><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">setInt(int parameterIndex, int x)</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">将指定参数设置为给定</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">Java int</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">值。</span></div></li><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">setString(int parameterIndex, String x)</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">将指定参数设置为给定</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">Java String</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">值</span></div></li><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">setObject(int parameterIndex, Object x)</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">使用给定对象设置指定参数的值。</span></div></li></ol><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">*</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">使用</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PreparedStatement</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">预处理对象</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">,</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">可以有效的避免</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">注入</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">Statement</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">与</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PreparedStatement</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">的区别</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">?</span></div><ol style="margin-top: 0mm; margin-bottom: 0mm; margin-left: 0mm; padding-left: 0pt;"><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">Statement</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">用于执行静态</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">语句，在执行时，必须指定一个事先准备好的</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">语句。</span></div></li><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PrepareStatement</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">是预编译的</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">SQL</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">语句对象，语句中可以包含动态参数</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">“?”</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">，在执行时可以为</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">“?”</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">动态设置参数</span> <span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">值。</span></div></li><li style="margin-left: 15pt; margin-right: 0pt; padding-left: 0pt; text-indent: 0pt; font-size: 10.5pt;"><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PrepareStatement</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">可以减少编译次数提高数据库性能。</span></div></li></ol><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">JDBC</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">控制事务</span></div><div style="min-height: 15pt; text-align: justify;"><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">十五相关</span><span style="min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">API</span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">setAutoCommit(boolean autoCommit)</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">参数是</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">true</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">或</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">false</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">如果设置为</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">false</span><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">，表示关闭自动提交，相</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">当于开启事务</span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">void commit() </span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">提交事务</span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">void rollback() </span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">回滚事务</span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">JDBC</span><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">控制十五的开发步骤</span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">1.</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">获取连接</span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">2.</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">开启事务</span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">3.</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">获取到</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">PreparedStatement ,</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">执行两次更新操作</span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;"> 4.</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">正常情况下提交事务</span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">5.</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">出现异常回滚事务</span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: Calibri;">6.</span> <span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt; color: rgb(1, 1, 1); font-family: 宋体;">最后关闭资源</span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt;"><br/></span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><span style="text-indent: -61mm; min-height: 15pt; font-size: 10.5pt;"><br/></span></div><div style="margin: 0mm 0mm 0mm 61mm; text-indent: -61mm; padding-top: 0mm; padding-bottom: 0mm; min-height: 15pt; text-align: justify;"><br/></div><div><br/></div><div><font style="font-size: 16pt;"><span style="text-indent: -61mm; min-height: 15pt; color: rgb(255, 0, 0); font-size: 16pt; font-family: 华文楷体;">数据库连接池</span></font> <span style="color: rgb(255, 0, 0);"> </span>   </div><div>连接池介绍</div><div>啥是连接池： 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程，为了解决此类性能问题，通常情况我们 采用连接池技术，来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了，这些操作都交 给了连接池.</div><div>连接池的好处： 用池来管理Connection，这样可以重复使用Connection。 当使用完Connection后，调用Connection的 close()方法也不会真的关闭Connection，而是把Connection“归还”给池。</div><div>常见连接池： DBCP连接池, C3P0连接池, Druid连接池</div><div>DBCP连接池： 也是一个开源的连接池，是Apache成员之一，在企业开发中也比较常见，tomcat内置的连接池。</div><div>编写DBCP连接池工具类： Java中提供了一个连接池的规则接口 ： DataSource , 它是java中提供的连接池</div><div>                                          在DBCP包中提供了DataSource接口的实现类，我们要用的具体的连接池 BasicDataSource 类</div><div>编写工具类步骤</div><ol><li><div>定义常量 保存数据库连接的相关信息</div></li><li><div>创建连接池对象 (有DBCP提供的实现类)</div></li><li><div>使用静态代码块进行配置</div></li><li><div>编写一个方法在方法中有：1.从连接池中获取连接 </div></li><li><div>释放资源方法 con,statement ,resultset</div></li></ol><div>常见配置项</div><ol><li><div>driverClassName 数据库驱动名称</div></li><li><div>url 数据库地址</div></li><li><div>username 用户名</div></li><li><div>password 密码</div></li></ol><div>C3P0连接池： C3P0是一个开源的JDBC连接池,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、 Spring等。</div><div>C3P0   1.需要导入配置文件c3p0-config.xml</div><div><br/></div><div><img src="第二阶段模块二笔记_files/Image.png" type="image/png" data-filename="Image.png"/></div><div><img src="第二阶段模块二笔记_files/Image [1].png" type="image/png" data-filename="Image.png"/></div><div><br/></div><div>编写C3P0工具类</div><div>核心工具类： ComboPooledDataSource</div><ol><li><div>new ComboPooledDataSource(); 使用 默认配置</div></li><li><div>new ComboPooledDataSource(&quot;mysql&quot;); 使用命名配置</div></li><li><div>常见配置 必须项  user  password driverClass(驱动) jdbcUrl（路劲）</div></li></ol><div>Druid连接池</div><div>Druid是目前最好的数据库连接池。在功 能、性能、扩展性方面，都超过其他数据库连接池。</div><div>导入jar包：druid-1.0.9.jar</div><div>导入配置文件（ 是properties形式 ） 统一放到resources资源目录</div><div>编写工具类</div><ol><li><div>通过工厂来来获取 DruidDataSourceFactory类的createDataSource方法</div></li><li><div>createDataSource(Properties p) 方法参数可以是一个属性集对象</div></li></ol><div>DBUtils工具类</div><div>为了简化开发可以选择使用该工具类</div><div>DBUtils就是JDBC的简化开发工具包</div><div>使用方式：</div><ol><li><div>t导入jar包 commons-dbutils-1.6.jar</div></li></ol><div>该核心功能</div><ol><li><div>QueryRunner 中提供对sql语句操作的API.</div></li><li><div>. ResultSetHandler接口，用于定义select操作后，怎样封装结果集.</div></li><li><div>DbUtils类,他就是一个工具类,定义了关闭资源与事务处理相关方法.</div></li></ol><div>DBUti'l's完成CRUD</div><div>QueryRunner核心类</div><ol><li><div>构造方法 ：QueryRunner（ DataSource ds ） 提供连接池  DBUtils会自动维护链接connection</div></li></ol><div>常用方法 1. update(Connection conn, String sql, Object... params) ，用来完成表数据的增加、删除、更新操作   2. query(Connection conn, String sql, ResultSetHandler rsh, Object... params) ，用来完成表 数据的查询操作</div><div>QueryRunner创建</div><div>自动模式： QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());</div><div>自动模式需要传入连接池对象</div><div>获取连接池对象</div><div> public static DataSource getDataSource(){</div><div> return dataSource;</div><div> }</div><div>QueryRunner实现查询操作</div><div>方法：</div><div>ResultSetHandler可以对查询出来的ResultSet结果集进行处理，达到一些业务上的需求。</div><div>BeanHandler  将结果集中第一条记录封装到一个指定的javaBean中.</div><div>BeanListHandler  将结果集中每一条记录封装到指定的javaBean中，再将这些javaBean在封装到List 集合中</div><div>ScalarHandler  它是用于封装单个数据。例如 select count(*) from 表操作。</div><div><br/></div><div>query方法的返回值都是泛型 具体的返回值类型,会根据结果集的处理方式,发生变化</div><div><br/></div><div><br/></div><div><span style="font-family: 华文行楷; color: rgb(255, 0, 0); font-size: 16pt;">数据库批处理</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">1.批处理指的是一次操作中执行多条SQL语句，批处理相比于一次一次执行效率会提高很多</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">2.当向数据库中添加大量的数据时，需要用到批处理。</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">实现批处理 （</span> <span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">PreparedStatement</span> <span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">）</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">方法：</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">1.void addBatch() 将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。 通过调用方法 executeBatch 可以批量执行此列表中的命令。</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">2</span> <span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">int[] executeBatch() 每次提交一批命令到数据库中执行，如果所有的命令都成功执行了， 那么返回一个数组，这个数组是说明每条命令所影响的行数</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">mysql 批处理是默认关闭的，所以需要加一个参数才打开mysql 数据库批处理，在url中添加</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">MySql元数据</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">除了表之外的数据都是元数据,可以分为三类</span></div><ol><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">查询结果信息： UPDATE 或 DELETE语句 受影响的记录数</span></div></li><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">数据库和数据表的信息： 包含了数据库及数据表的结构信息。</span></div></li><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">MySQL服务器信息： 包含了数据库服务器的当前状态，版本号等。</span></div></li></ol><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">使用j'd'b'c获取元数据</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">jdbc中描述元数据的类</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">DatabaseMetaData 描述数据库的元数据对象</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">DatabaseMetaData 描述数据库的元数据对象</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">获取元数据对象的方法 : getMetaData ()</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">1.connection 连接对象, 调用 getMetaData () 方法,获取的是DatabaseMetaData 数据库元数据对象</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">2.PrepareStatement 预处理对象调用 getMetaData () , 获取的是ResultSetMetaData , 结果集元数据对象</span></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">DatabaseMetaData的常用方法</span></div><ol><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">getURL() : 获取数据库的URL</span></div></li><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">getUserName(): 获取当前数据库的用户名</span></div></li><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">getDatabaseProductName(): 获取数据库的产品名称</span></div></li><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">getDatabaseProductVersion(): 获取数据的版本号</span></div></li><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">getDriverName(): 返回驱动程序的名称</span></div></li><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">isReadOnly(): 判断数据库是否只允许只读 true 代表只读</span></div></li></ol><div><br/></div><div><br/></div><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">ResultSetMetaData的常用方法</span></div><ol><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">getColumnCount() : 当前结果集共有多少列</span></div></li><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">getColumnName(int i) : 获取指定列号的列名, 参数是整数 从1开始</span></div></li><li><div><span style="font-family: &quot;Yu Gothic UI Semibold&quot;;">getColumnTypeName(int i): 获取指定列号列的类型, 参数是整数 从1开始</span></div></li></ol><div><br/></div><div><br/></div><div><span style="color: rgb(255, 0, 0); font-family: 华文仿宋; font-size: 16pt;">XML（1.0版本）</span></div><div><span style="font-family: 黑体;">特点：</span> <span style="font-family: 黑体;">可扩展的, 标签都是自定义的   </span> <span style="font-family: 黑体;">语法十分严格</span></div><div><span style="font-family: 黑体;">作用：</span></div><ol><li><div><span style="font-family: 黑体;">存储数据    </span> <span style="font-family: 黑体;">通常，我们在数据库中存储数据。不过，如果希望数据的可移植性更强，我们可以 把数据存储 XML 文件中</span></div></li><li><div><span style="font-family: 黑体;">配置文件   </span> <span style="font-family: 黑体;">作为各种技术框架的配置文件使用 (最多)</span></div></li><li><div><span style="font-family: 黑体;">在网络中传输    </span> <span style="font-family: 黑体;">客户端可以使用XML格式向服务器端发送数据,服务器接收到xml格式数据,进行解析</span></div></li></ol><div><span style="font-family: 黑体;">语法</span></div><div><span style="font-family: 黑体;">文档生命必须在第一行</span></div><div><span style="font-family: 黑体;">格式：</span><span style="font-family: 黑体;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span></div><div><span style="font-family: 黑体;">元素：ELement元素 是xml文档中最重要的组成部分</span></div><div><span style="font-family: 黑体;">命名规则：</span></div><ol><li><div><span style="font-family: 黑体;">不能使用空格，不能使用冒号</span></div></li><li><div><span style="font-family: 黑体;">XML 标签名称区分大小写</span></div></li><li><div><span style="font-family: 黑体;">XML 必须有且只有一个根元素</span></div></li></ol><div><span style="font-family: 黑体;">语法格式：&lt;users&gt;&lt;users&gt;</span></div><div><span style="font-family: 黑体;">XML 必须有且只有一个根元素，它是所有其他元素的父元素</span></div><div><span style="font-family: 黑体;">元素体：元素体可以是元素，也可以是文本</span></div><div><span style="font-family: 黑体;">空元素：空元素只有开始标签，而没有结束标签，但元素必须自己闭合</span></div><div><span style="font-family: 黑体;">普通元素的结构开始标签、元素体、结束标签组成。</span></div><div><span style="font-family: 黑体;"><br/></span></div><div><span style="font-family: 黑体;">属性：</span></div><ol><li><div><span style="font-family: 黑体;">属性是元素的一部分，它必须出现在元素的开始标签中</span></div></li><li><div><span style="font-family: 黑体;">属性的定义格式：属性名=属性值，其中属性值必须使用单引或双引</span></div></li><li><div><span style="font-family: 黑体;">一个元素可以有0~N个属性，但一个元素中不能出现同名属性</span></div></li><li><div><span style="font-family: 黑体;">属性名不能使用空格、冒号等特殊字符，且必须以字母开头</span></div></li></ol><div>注释格式&lt;!--    --&gt;</div><div><br/></div><div>XML约束(必须掌握会阅读和引入)： 在XML技术里，可以编写一个文档来约束一个XML文档的书写规范，这称之为XML约束</div><div>常见的xml约束</div><ol><li><div>DTD</div></li><li><div>Schema</div></li></ol><div><br/></div><div>XML解析：</div><div>概述： 当将数据存储在XML后，我们就希望通过程序获得XML的内容。如果我们使用Java基础所学习的IO知 识是可以完成的，不过你需要非常繁琐的操作才可以完成，且开发中会遇到不同问题（只读、读写）。 人们为不同问题提供不同的解析方式，并提交对应的解析器，方便开发人员操作XML。</div><div><br/></div><div>解析方式：</div><ol><li><div>DOM</div></li><li><div>SAX (速度更快，更有效地方法)优点： 占用内存少 处理速度快，可以处理大文件 缺点： 只能读，逐行后将释放资源</div></li></ol><div>XML常见解析器</div><div>解析器：就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐，为了方便开发人员， 有提供易于操作的解析开发包</div><div>DOM4J：一款非常优秀的解析器 , Dom4j是一个易用的、开源的库，用于XML，XPath和XSLT。 它应用于Java平台，采用了Java集合框架并完全支持DOM，SAX和JAXP。</div><div>DOM4J使用</div><div>导入JAR包 dom4j-1.6.1.jar</div><div><br/></div><div>常见API</div><div>SaxReader对象: read(…) 加载执行xml文档</div><div>Document对象: getRootElement() 获得根元素</div><div>Element对象:</div><ol><li><div>elements(…) 获得指定名称的所有子元素。可以不指定名称</div></li><li><div>element(…) 获得指定名称的第一个子元素。可以不指定名称</div></li><li><div>getName() 获得当前元素的元素名</div></li><li><div>attributeValue(…) 获得指定属性名的属性值</div></li><li><div>elementText(…) 获得指定名称子元素的文本值</div></li><li><div>getText() 获得当前元素的文本内容</div></li></ol><div><br/></div><div>准备XML文件</div><div>读取XML步骤</div><ol><li><div>获取XML文件中的 所有的元素名称(标签)</div></li><li><div>.解析XML 获取 文档对象 document</div></li><li><div>获取</div></li></ol><div>xpath方式读取xml</div><div>XPath 是一门在 XML 文档中查找信息的语言。 可以是使用xpath查找xml中的内容。</div><div>优点： 由于DOM4J在解析XML时只能一层一层解析，所以当XML文件层数过多时使用会很不方便，结合 XPATH就可以直接获取到某个元素</div><div>导入 jaxen-1.1-beta-6.jar包</div><div>JDBC自定义xml</div><div>创建自定义xml文件保存数据库连接信息：j'd'b'c-config.xml</div><div>编写工具类步骤</div><ol><li><div>定义成员变量</div></li><li><div>使用xpath读取xml配置信息</div></li><li><div>注册驱动</div></li><li><div>获取连接对象</div></li></ol><div>测试工具类步骤：</div><ol><li><div>获取连接</div></li><li><div>获取statement</div></li><li><div>处理结果集</div></li></ol><div><br/></div><div><br/></div><div><br/></div><div style="background-color:rgb(43, 43, 43);color:rgb(169, 183, 198);font-family:Consolas;font-size:13.5pt;"><span style="color: #808080;">com.lagou.app</span> <span style="color: #808080; font-family: 'Arial Unicode MS';">测试包 用于对</span><span style="color: #808080;">DAO</span><span style="color: #808080; font-family: 'Arial Unicode MS';">代码进行测试</span></div><div style="background-color:rgb(43, 43, 43);color:rgb(169, 183, 198);font-family:Consolas;font-size:13.5pt;"><span style="color: #808080;">com.lagou.dao dao</span><span style="color: #808080; font-family: 'Arial Unicode MS';">包 数据访问层</span><span style="color: #808080;">,</span><span style="color: #808080; font-family: 'Arial Unicode MS';">包含所有对数据库的相关操作的类</span></div><div style="background-color:rgb(43, 43, 43);color:rgb(169, 183, 198);font-family:Consolas;font-size:13.5pt;"><span style="color: #808080;">com.lagou.entity</span> <span style="color: #808080; font-family: 'Arial Unicode MS';">实体包 保存根据数据库表 对应创建的</span><span style="color: #808080;">JavaBean</span><span style="color: #808080; font-family: 'Arial Unicode MS';">类</span></div><div style="background-color:rgb(43, 43, 43);color:rgb(169, 183, 198);font-family:Consolas;font-size:13.5pt;"><span style="color: #808080;">com.lagou.utils</span> <span style="color: #808080; font-family: 'Arial Unicode MS';">工具包</span></div><div><br/></div><div><br/></div><div><br/></div><div style="background-color:rgb(43, 43, 43);color:rgb(169, 183, 198);font-family:&quot;Arial Unicode MS&quot;;font-size:13.5pt;">在<span style="font-family: 'Consolas';">Java</span>一对多的数据关系中，需要遵循以下设计原则：</div><div style="background-color:rgb(43, 43, 43);color:rgb(169, 183, 198);font-family:&quot;Arial Unicode MS&quot;;font-size:13.5pt;"><span style="color: #cc7832; font-family: 'Consolas';">- 1.</span> <span style="font-family: 'Consolas';">Java</span>类的名称 <span style="font-family: 'Consolas';">=</span> 实体表的名称</div><div style="background-color:rgb(43, 43, 43);color:rgb(169, 183, 198);font-family:&quot;Arial Unicode MS&quot;;font-size:13.5pt;"><span style="color: #cc7832; font-family: 'Consolas';">2.</span> <span style="font-family: 'Consolas';">Java</span>类的属性 <span style="font-family: 'Consolas';">=</span> 实体表的字段</div><div style="background-color:rgb(43, 43, 43);color:rgb(169, 183, 198);font-family:&quot;Arial Unicode MS&quot;;font-size:13.5pt;"><span style="color: #cc7832; font-family: 'Consolas';">3.</span> <span style="font-family: 'Consolas';">Java</span>类的一个对象 <span style="font-family: 'Consolas';">=</span> 表的一行记录</div><div style="background-color:rgb(43, 43, 43);color:rgb(169, 183, 198);font-family:&quot;Arial Unicode MS&quot;;font-size:13.5pt;"><span style="color: #cc7832; font-family: 'Consolas';">4.</span> 外键关系 <span style="font-family: 'Consolas';">=</span> 引用配置</div><div><br/></div></div><div><br/></div></span>
</div></body></html> 